import execjs

# JavaScript代码
js_code = """
var CryptoJS = require('crypto-js');

// 生成MD5加密的AES密钥

// 根据当前时间戳的后六位抽取26个英文字母中的部分字符
function extractKeyFromTimestamp(times) {
  const alphabet = 'abcdefghijklmnopqrstuvwxyz';
  let timestamp = Date.now().toString();

  // 计算lastSixDigits
  let lastSixDigits;
  if (times) {
    lastSixDigits = times.toString();
  } else {
    const dividedTimestamp = Math.floor(parseInt(timestamp, 10) / 3.1415926).toString();
    lastSixDigits = dividedTimestamp.padEnd(6, '0').slice(-6);
  }

  let extractedKey = '';

  for (let i = 0; i < lastSixDigits.length; i++) {
    const index = parseInt(lastSixDigits[i], 10) % 26;
    extractedKey += alphabet[index];
  }

  // 扩展密钥到16字节
  while (extractedKey.length < 16) {
    extractedKey += extractedKey;
  }
  extractedKey = extractedKey.slice(0, 16);

  return {
    key: extractedKey,
    timestamp: lastSixDigits
  };
}

// 加密数据

function encryptData(data, key) {
  // 将数据转换为JSON字符串
  const jsonString = JSON.stringify(data);
  console.log('加密前的数据:', jsonString);

  // 将JSON字符串转换为Base64字符串
  const base64Data = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(jsonString));
  console.log('加密前的base64数据:', base64Data);

  // 使用AES加密数据
  const encryptedData = CryptoJS.AES.encrypt(base64Data, key).toString();

  return {
    encrypted: encryptedData,
  };
}

// 解密数据
function decryptData(encryptedData, key) {
  console.log('解密前的加密数据:', encryptedData);

  // 使用AES解密数据
  const decryptedBytes = CryptoJS.AES.decrypt(encryptedData, key);

  // 将解密后的数据从WordArray转换为Base64字符串
  const base64Data = decryptedBytes.toString(CryptoJS.enc.Utf8);
  console.log('解密后的base64数据:', base64Data);

  // 将Base64字符串转换回原始数据字符串
  const originalData = CryptoJS.enc.Base64.parse(base64Data).toString(CryptoJS.enc.Utf8);
  console.log('解密后的原始数据:', originalData);

  try {
    // 将原始数据字符串解析为JSON对象
    const jsonData = JSON.parse(originalData);
    console.log('解密后的json数据:', jsonData);

    // 打印并返回解密后的JSON对象
    console.log('即将返回的数据:', jsonData);
    return jsonData;
  } catch (error) {
    console.error('解析JSON时出错:', error);
    return null; // 或者返回一个默认值或错误对象
  }
}
"""

# 编译JavaScript代码
ctx = execjs.compile(js_code)

# 调用JavaScript函数
def extract_key_from_timestamp():
    return ctx.call("extractKeyFromTimestamp")

def encrypt_data(data, key):
    return ctx.call("encryptData", data, key)

def decrypt_data(encrypted_data, key):
    return ctx.call("decryptData", encrypted_data, key)

# 示例使用
if __name__ == '__main__':
    extracted_key = extract_key_from_timestamp()
    print('Extracted Key:', extracted_key)

    data = {"name": 'blank', "password": 123456}
    encrypted_result = encrypt_data(data, extracted_key['key'])
    print('Encrypted Data:', encrypted_result)

    decrypted_data = decrypt_data(encrypted_result['encrypted'], extracted_key['key'])
    print('Decrypted Data:', decrypted_data)
